package com.pattern.factory.factorymethod;

/**
 * <p>
 * 在factorymethod中使用了接口  而在abstractfactory中使用了抽象类
 *         那么为什么要这样区分呢
 *
 * 主要是一个语义上的区别：
 *         在abstractfactory中 Food、Vehicle、Weapon都是抽象的事物  故定义成抽象类
 *         在factorymethod中 Moveable是代表行为或者是能力  故定义成接口
 * </p>
 *
 * @author qingshan
 * @since 2020-07-19 17:20
 */
public class Main {

    public static void main(String[] args) {

        // 生成汽车类
        Car car = new Car();
        car.go();

        // 生成飞机类
        Plane plane = new Plane();
        plane.go();

        // -----------------更进一步------------------
        /*
            无论汽车还是飞机  其实现新创建的接口 Moveable
            此时创建这些工具类如下
         */
        Moveable accureateCar = new AccurateCar();
        accureateCar.go();

        Moveable accuratePlane = new AccuratePlane();
        accuratePlane.go();
    }
}
